/**
 * E.FLY 2012.06.14
 * 初始化正则所有参数
 * //vReg表示对应的正则，可以到myValidationReg.js查看
 * //vL表示是否出现输入错误或者正确提示，!= undefined 或者有该属性表示不提示，否则提示
 * //提示效果是：出现在input标签后面
 * //vL != undefined 或者有该属性时,如果验证失败，会为input标签加上红框
 * 如果输入的字符长度需要改变，可以在vReg值后面加上取值范围格式为:(x,xx)，如vReg="NOTHTML(1,20)"
 * 对应的正则和提示信息则用{?}替代，如:"NOTHTML":"^.{?}$"和提示信息如:"NOTHTML":"不能输入HTML标签!且在{?}之间!"
 * //为了可以自定义显示错误内容，添加vTip属性，vTip属性值则为显示内容
 * //为了判断地区是否需要选择加上 MYAREA key值，使用时用一个容器包住includ进来的地区联动jsp,并为此容器加上属性vReg="MYAREA" vL="0" 记得判断是否选择地区
 * //为了满足有些input在某个地方必填，在某个地方可不填，如电话vReg="PHONE"：为它加上参数后：vReg="PHONE(|^$)"可不填，注意此参数是固定的。否则是必填的。
 * //可以有多个参数，如：vReg="TEST[(1,2)||(3,4)||(4)]"，多个参数是，参数必须放到中括号[]里面，以两竖线(||)分隔
 * 正则写法和提示信息写法请看 TEST 如："TEST":"^[0-9]{?1}$|^[a-z]{?2}$|^A{?3}$",第一个参数标识 ?1,第二个 ?2,以此类推....
 * 添加属性：vCkNum(2)//判断下拉列表至少要选择几项
 * 复选框：CHECKBOX(2)参数表示至少必选多少个，没有参数时表示可以不选
 * 
 * 使用 ：function _put_vReg(key,reg,tip,error)方法；进行对正则和错误信息的扩充
 * 数字，如：NUM(是否正数(0/1/2),小数点左边最多位数(+:表示固定位数),小数点右边最多位数(+:表示固定位数),是否可为空(0/1));
 * 如：NUM(1,10,+2,1);
 * NUM的参数优先级别：小数点左边最多位数(+:表示固定位数) ——> 小数点右边最多位数(+:表示固定位数) ——> 是否正数(0/1/2) ——> 是否可为空(0/1)
 * 
 */ 

//正则 
var vReg = {
	"UNAME":"^[a-z][a-z0-9_]{5,20}$",//用户名  UNAME 此 key 值不要改动
	//"UNAME_NUM":"^$|^[^\<\>\%]{6,20}",//用户名  UNAME 此 key 值不要改动
	"UNAME_NUM":"[a-zA-Z0-9_]{6,20}|[^\<\>\%]{6,20}/",//用户名  UNAME 此 key 值不要改动
	"UNAME_initial":"^[a-zA-Z][a-zA-Z0-9_]{5,19}$",//用户名  UNAME 以字母开头 6-20个字符  此 key 值不要改动  *xulihui*
	"PASSWORD":"(?=.{6,20}$)(?=(?:.*?\d))(?=(?:.*?[a-zA-Z]))",//密码，PASSWORD 此 key 值不要改动
	"LOGINPASSWORD":"^[a-zA-Z0-9]{6,20}$",//密码，PASSWORD 此 key 值不要改动
	"PASSWORD_initial":"^[a-zA-Z][a-zA-Z0-9_]{5,19}$",//密码，PASSWORD 以字母开头 6-20个字符  此 key 值不要改动 *xulihui*
	"NOTHTML":"^(.|\\s){?}$",  //不能输入HTML标签，key值不要改动 
	"RADIO":"RADIO",//单选框，key值不要改动
	"CHECKBOX":"CHECKBOX",//单选框，key值不要改动
	"MYAREA":"MYAREA",//检查该子节点下的区域联动是否选择
	"NUM":"^\\d{?1}$",//数字，如：NUM(是否正数(0/1),小数点左边最多位数(+:表示固定位数),小数点右边最多位数(+:表示固定位数),是否为空(0/1));
	
	"IDCAR":"^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$|^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{4}${?}",
	//"IDCAR":"^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$",
	"T_UNAME":"^[a-zA-Z\\.\\s]{?}$",//
	"T_NOTHTML":"^(.|\\s){?}$",
	"EMEIL":"\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\.\\w+([-.]\\w+)*{?}",
	"EMEIL_EMP":"^$|^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$",//邮箱验证，可以为空，如果不为空，就必须是邮箱格式
	"EMEIL_NOTNULL":"^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$",//邮箱验证，不能为空，必须是邮箱格式 *xulihui*
	"QQGROUPNAME":"^[\\u4E00-\\u9FA5\\uf900-\\ufa2d\\w0-9]{?}$",
	"NUMBER":"^[0-9]{?}$",
	"T_NUMBER":"^[0-9]{?}$",
	"ONENUMBER":"^[1-9]{?}$",
	"PRICE":"^\\d{?1}(\\.\\d{?2})?${?3}",
	"PRICE_F1":"^[1-9]{1}\.\\d{1,2}$|^[0]{1}\.[1-9]$|^[1-9]\\d{1,}\.\\d{1}$|^[1-9]{1}\\d{0,}${?}",
	"PRICE_F2":"^[+]?\\d*([.]\\d{0,2})?$",
	"PRICE_F3":"^[1-9]{1}\.\\d{1,2}$|^[0]{1}\.[0][1-9]$|^[0]{1}\.[1-9]\\d$|^[1-9]\\d{1,}\.\\d{1,2}$|^[1-9]{1}\\d{0,}${?}",
	"ZHEKOU":"^[0]{1}\.[0][1-9]$|^[0]{1}\.[1-9](\\d?)$|^1(\.[0]{1,2})?${?}",
	"PHONE":"^(\\d{3,4}-)?\\d{7,8}${?}",
	"MOBILE":"^0?[1]\\d{10}${?}",
	"PHONE_EMP":"^$|^(\\d{3,4}-)?\\d{7,8}${?}",
	"MOBILE_EMP":"^$|^0?[1]\\d{10}${?}",
	"FAX":"^(\\d{3,4}-)?\\d{7,8}${?}",
	"QQ":"^[1-9][0-9]{4,12}${?}",
	"QQ_EMP":"^$|^[1-9][0-9]{4,12}${?}",
	"ZIP":"^[1-9]\\d{5}${?}",
	"CHINEORENGLISH":"^[\\u4E00-\\u9FA5\\uf900-\\ufa2d\\w-_\\s{1,4}\.]{?}$",
	"CHINEORENGLISHNUM":"^[\\u4E00-\\u9FA5\\uf900-\\ufa2d\\w0-9\\.\\_\\-\\[\\]]{?}$",
	"CHINESEVERIFICATION":"^[\\u4E00-\\u9FA5\\uf900-\\ufa2d]{?}$",
	"UPPERENGLISH":"^[A-Z]{?}$",
	"LOWERENGLISH":"^[a-z]{?}$",
	"NUMBERENGLISH":"^[a-zA-Z0-9]{?}$",
	"ENGLISH":"^[a-zA-Z-_\\s]{?}$",
	"PICTURE":".*gif|.*png|.*jpg|.*GIF|.*PNG|.*JPG${?}",
	"SEARCHSTONEMEMBER":"^$|^[^\<\>\%]{1,50}$",
	"OLDPWD":"^[a-zA-Z0-9]{?1}${?2}",
	"NOTEMPTY":"^.{1,}$",
	"EMPTY":"^$",
	"AFTERTIME":"",
	"CENTERTIME":"",
	"BEFORETIME":"",
	"BEFORENOW":"",//小于当前时间，格式：BEFORENOW(YYYY)、BEFORENOW(YYYY-MM)、BEFORENOW(YYYY-MM-DD) 参数可不写,不写已DATE正则匹配
	"AFTERNOW":"",//大于当前时间，格式：BEFORENOW(YYYY)、BEFORENOW(YYYY/MM)、BEFORENOW(YYYY/MM/DD) 参数可不写,不写已DATE正则匹配
//	"DATE":"^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(-|\/)(((0[13578]|1[02])(-|\/)(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(-|\/)(0[1-9]|[12][0-9]|30))|(02(-|\/)(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))(-|\/)02(-|\/)29))$",
	"DATE":"^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(-|\/)(((0[13578]|1[02])(-|\/)(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(-|\/)(0[1-9]|[12][0-9]|30))|(02(-|\/)(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))(-|\/)02(-|\/)29))(\\s{1,4})?((([01]?[0-9])|([2][0123])):([0-5]?[0-9]):([0-5]?[0-9]))?$",
	"TEST":"^[0-9]{?1}$|^[a-z]{?2}$|^A{?3}$",
	//lyk
	//^(https|http|ftp|rtsp|mms)?://(([0-9a-zA-Z_!~*'().&=+$%-]+: )?[0-9a-zA-Z_!~*'().&=+$%-]+@)?(([0-9]{1,3}\.){3}[0-9]{1,3}|([0-9a-zA-Z_!~*'()-]+\.)*([0-9a-zA-Z][0-9a-zA-Z-]{0,61})?[0-9a-zA-Z]\.[a-zA-Z]{2,6})(:[0-9]{1,4})?((/?)|(/[0-9a-zA-Z_!~*'().;?:@&=+$,%#-]+)+/?)$
	"URL":"^((https|http|ftp|rtsp|mms)?://)?(([0-9a-zA-Z_!~*'().&=+$%-]+: )?[0-9a-zA-Z_!~*'().&=+$%-]+@)?(([0-9]{1,3}\.){3}[0-9]{1,3}|([0-9a-zA-Z_!~*'()-]+\.)*([0-9a-zA-Z][0-9a-zA-Z-]{0,61})?[0-9a-zA-Z]\.[a-zA-Z]{2,6})(:[0-9]{1,4})?((/?)|(/[0-9a-zA-Z_!~*'().;?:@&=+$,%#-]+)+/?)$"
}
	
//鼠标移上提示信息
var vTip = {
	"UNAME":"请输入您的用户名!格式为：数字、小写英文以字母开头6-20位!",
	"UNAME_NUM":"请输入您的用户名!格式为：数字或者字母长度为6-20位!",
	"UNAME_initial":"请输入您的用户名!格式为：以字母开头，数字或者字母长度为6-20位!", //*xulihui*
	"PASSWORD":"请输入您的密码!格式为：数字、英文6-20位!",
	"LOGINPASSWORD":"请输入您的密码!格式为：数字、英文6-20位!",
	"PASSWORD_initial":"请输入您的密码!格式为：数字、英文6-20位!",//*xulihui*
	"NOTHTML":"请输入{?}字!不能输入成对尖括号且里面带有英文,如：<英文>或/>",
	"T_NOTHTML":"请输入{?1}{?2}字!不能输入成对尖括号且里面带有英文,如：<英文>或/>",
	"RADIO":"RADIO",
	"CHECKBOX":"CHECKBOX",
	"MYAREA":"MYAREA",
	
	"IDCAR":"请输入正确身份证号码，15或18位!",
	"T_UNAME":"请输入英文名!英文位数{?1}{?2}",
	"QQGROUPNAME":"名称支持中文、英文以及数字!最多{?}个字符!",
	"OLDPWD":"请输入您的密码!格式为：数字、英文{?1}位!{?2}",
	"EMEIL":"邮箱帐号{?}!格式为：xxx@xx.xx",
	"EMEIL_EMP":"邮箱帐号格式为：xxx@xx.xx",
	"EMEIL_NOTNULL":"邮箱帐号格式为：xxx@xx.xx",//*xulihui*
	"T_NUMBER":"只能输入{?1}{?2}位数字!",
	"NUMBER":"只能输入{?}位数字!",
	"ONENUMBER":"只能输入1~9，{?}位数字",
	"PRICE":"只能输入{?1}位数字,最多保留{?2}位小数!",
	"PRICE_F1":"请输入价格,格式为：正整数!最多保留1位小数!",
	"PRICE_F2":"请输入金额,格式为：正整数!最多保留2位小数!",
	"PRICE_F3":"请输入金额,格式为：正整数!",
	"ZHEKOU":"请输入折扣率,格式为：小于等于1的小数，最多保留2位小数!",
	"PHONE":"请输入您的电话号码,{?},格式为:区号-号码/号码!",
	"PHONE_EMP":"请输入您的电话号码,{?},格式为:区号-号码/号码!",
	"FAX":"传真{?},格式为:区号-号码/号码.",
	"QQ":"QQ{?},格式为:4-12位数字.",
	"QQ_EMP":"QQ{?},格式为:4-12位数字(可为空).",
	"ZIP":"邮编{?},格式为:6位数字.但不能已0开头!",
	"MOBILE":"手机{?},格式为11位以1或0开头的手机号码!",
	"MOBILE_EMP":"手机{?},格式为11位以1或0开头的手机号码!",
	"CHINEORENGLISH":"名称支持中文、英文以及中x括号内的符号[-_.]和4空格!长度为{?}位!",
	"CHINEORENGLISHNUM":"名称支持中文、英文以及数字!长度为{?}位!",
	"UPPERENGLISH":"只能输入大写英文!长度为{?}位!",
	"LOWERENGLISH":"只能输入小写英文!长度为{?}位!",
	"NUMBERENGLISH":"只能输入数字和英文!长度为{?}位!",
	"ENGLISH":"只能输入下划线、横线和英文!长度为{?}位!",
	"PICTURE":"允许GIF,PNG,JPG图片!",
	"SEARCHSTONEMEMBER":"可以不填!但不能含有'<>%',长度1-50位!",
	"NOTEMPTY":"不能为空",
	"EMPTY":"必须为空字符串!",
	"AFTERTIME":"",
	"CENTERTIME":"",
	"BEFORETIME":"",
	"DATE":"时间格式："+"yyyy-MM-dd".fontcolor("red")+" 或 "+"yyyy/MM/dd".fontcolor("red")+" </br> 以及可以加：时(包括"+"12/24小时制".fontcolor("red")+")分秒!",
	
	"TEST":"允许数字{?1}位,小写英文{?2}位,大写A{?3}位!",
		
	"URL":"根据正确的网址格式输入!",
	"CHINESEVERIFICATION":"只允许输入中文!长度为{?}位!"
}
	
//错误提示信息
var vError = {
	"UNAME":"你输入的用户名格式不正确!",
	"UNAME_NUM":"你输入的用户名格式不正确!",
	"UNAME_initial":"你输入的用户名格式不正确!",//*xulihui*
	"PASSWORD":"你输入的密码格式[数字、英文6-20位]不正确!请重新输入!",
	"LOGINPASSWORD":"你输入的密码格式[数字、英文6-20位]不正确!请重新输入!",
	"PASSWORD_initial":"你输入的密码格式[以字母开头，数字、英文6-20位]不正确!请重新输入!",//*xulihui*
	"NOTHTML":"请输入{?}字!不能输入成对尖括号且里面带有英文,如：<英文>或/>",
	"T_NOTHTML":"请输入{?1}{?2}字!不能输入成对尖括号且里面带有英文,如：<英文>或/>",
	"RADIO":"还没选择!请选择!",
	"CHECKBOX":"CheckBox至少要选择{?1}个!",
	"MYAREA":"MYAREA",
	
	"IDCAR":"您输入的身份证号码错误，15或18位!",
	"QQGROUPNAME":"您输入的QQ群名称不正确，请重新输入！",
	"T_UNAME":"您输入的英文名格式不正确[英文(1-50)位]，请重新输入！",
	"OLDPWD":"你输入的密码格式[数字、英文{?1}位!{?2}]不正确!请重新输入!",
	"EMEIL":"你输入的邮箱格式[xxx@xx.xx]不正确!请重新输入!",
	"EMEIL_EMP":"你输入的邮箱格式不正确!请重新输入!",
	"EMEIL_NOTNULL":"你输入的邮箱格式不正确!请重新输入!",//*xulihui*
	
	"NUMBER":"您输入格式[{?}]位数字]不正确!请重新输入!",
	"T_NUMBER":"您输入格式[{?1}{?2}]位数字不正确!请重新输入!",
	"ONENUMBER":"您输入格式只能输入1~9，[{?}]位数字]不正确!请重新输入!",
	"PRICE":"只能输入{?1}位数字,最多保留{?2}位小数!",
	"PRICE_F1":"您输入价格格式[正整数!最多保留1位小数]不正确!请重新输入!",
	"PRICE_F2":"您输入金额,格式[正整数!最多保留2位小数]不正确!请重新输入!",
	"PRICE_F3":"您输入金额,格式[正整数!]不正确!请重新输入!",
	"ZHEKOU":"请输入折扣率,格式为：小于等于1的小数，最多保留2位小数!",
	"PHONE":"您输入电话号码格式[区号-号码/号码]不正确!请重新输入!",
	"PHONE_EMP":"您输入电话号码格式[区号-号码/号码]不正确!请重新输入!",
	"FAX":"您输入传真格式[区号-号码/号码]不正确!请重新输入!",
	"QQ":"您输入QQ格式[{4,12}位数字]不正确!请重新输入!",
	"ZIP":"您输入邮编格式为[6位数字.但不能已0开头]不正确!请重新输入!",
	"CHINEORENGLISH":"您输入格式不正确!长度为{?}位!请重新输入!",
	"CHINEORENGLISHNUM":"您输入格式[支持中文、英文以及数字]不正确!长度为{?}位!请重新输入!",
	"UPPERENGLISH":"只能输入大写英文!长度为{?}位!请重新输入!",
	"LOWERENGLISH":"只能输入小写英文!长度为{?}位!请重新输入!",
	"NUMBERENGLISH":"只能输入数字和英文!长度为{?}位!请重新输入!",
	"ENGLISH":"只能输入下划线、横线和英文!长度为{?}位!请重新输入!",
	"MOBILE":"您输入手机号码格式[11位以1或0开头]不正确!请重新输入!",
	"MOBILE_EMP":"您输入手机号码格式[11位以1或0开头]不正确!请重新输入!",
	"PICTURE":"您选择的图片格式[允许GIF,PNG,JPG图片]不正确!请重新输入!",
	"SEARCHSTONEMEMBER":"您输入的格式[可以不填!但不能含有'<>%']不正确!请重新输入!",
	"NOTEMPTY":"不能为空",
	"EMPTY":"必须为空字符串!",
	"AFTERTIME":"",
	"CENTERTIME":"",
	"BEFORETIME":"",
	"DATE":"时间格式："+"yyyy-MM-dd".fontcolor("red")+" 或 "+"yyyy/MM/dd".fontcolor("red")+" </br> 以及可以加：时(包括12/24小时制)分秒!",
	
	"TEST":"格式：数字{?1}位,小写英文{?2}位,大写A{?3}位!",
		
	"URL":"您输入的网址格式不正确!请重新输入!",
		
	"CHINESEVERIFICATION":"用户名只允许为汉字的混合!"
}

//var $by = window.top.document != undefined ? (window.top.document.body != undefined ? window.top.document.body  : document.body) : document.body;
var $by = function(){
	var b;
	if(window.top != window.self){
		b = window.top.document.body;
	}else{
		b = document.body
	}
	return b;
}
$(function(){
	
	$($by()).append('<div class=\"vReg_Tip_Class\"></div>');
	$("body").append('<div class=\"vReg_Tip_Class\"></div>');
	
	//绑定有vReg属性的标签事件
	$("[vReg],[url]:not([vReg])")
		.on("mouseover",function(){
			_cVonmouseover(this);
		})
		.on("mouseout",function(){
			_cVonmouseout(this);
		})
		.on("mousemove", function(event){
			_cVonmousemove(this,event);
		})
		.on("blur", function(){
			var vDom = $(this).get(0);
			var $R = $(this);
			
			//单选按钮/地区下拉列表不出现提示
			if(_notTipOrCk($R))
				return;
			
			//判断是否需要验证Value值唯一性
			if($R.attr('vPath') != undefined){
				isHasThisValue(vDom,null);
			}
			//设置属性，用来判断该标签获取焦点，用途：提示错误信息上
			$(this).attr("vBlur","true");
			
			//开始验证
			oneValidate($R,vDom);
			
			//用完马上删除
			$(this).removeAttr("vBlur");
		}).attr({"vBlur":"1"});
	
	jQuery(document || window.top.document).mousemove(function(event) {
		var clicked = jQuery(event.target);
		if (!(clicked.is('[vReg]'))) {
			_cVonmouseout();
		}
	});
	
	/**
	 * 提交表单
	 * @memberOf {TypeName} 
	 * @return {TypeName} 
	 */
	$("form").submit(function(){
		var r = $(this);
		if(r.attr("VNO") == 'no')return;
		return cValidate(r);
	});
	
})
function _cVonmouseover(r){
	//获取标签中vReg属性的值
	var vR = $(r).attr('vReg');
	//单选按钮/地区下拉列表不出现提示
	if(_notTipOrCk($(r)) || _notTip($(r)))
		return;
	//取出鼠标移上提示信息
	var tValue = "";
	var rtp = _subParam($(r),vR,null,null,tValue);
	tValue = rtp["tValue"];
	$(".vReg_Tip_Class")
		.show()
		.html(tValue);
}

function _cVonmouseout(r){
	//单选按钮/地区下拉列表不出现提示
	if(r!=undefined && ( _notTipOrCk($(r)) || _notTip($(r))))
		return;
	$(".vReg_Tip_Class").hide();
}

function _cVonmousemove(r,event){
	//单选按钮/地区下拉列表不出现提示
	if(_notTipOrCk($(r)) || _notTip($(r)))
		return;
	var scrollTop = new Number(_getPageScroll());
	var scrollLeft = new Number(document.body.scrollLeft);
	var scrollHeigth = new Number(event.clientX);
	var top = (event.clientY + scrollTop + 10)+"px";
	var left = (scrollHeigth + scrollLeft)+"px";
	$(".vReg_Tip_Class").css({"top":top,"left":left});
}

var cDom = null;//验证提示
var alt = null;//提示信息
var errorJson = {};
/**
 * 提交表单时验证
 * @param {Object} r：form对象
 */
function cValidate(r){
	ErrorArray = new Array();
	cDom = null;
		alt = null;
	var result = true;
	//验证是否存在密码，并两次输入的密码是否一致
	if(!samePassWord(r))
		return false;
	
	//验证是否存在单选按钮
	result = _ckRadio(r);
	
	//验证是否存在CheckBox
	if(result)
		result = _ckCheckBox(r);
	
	//验证是否存在地区下拉列表
	var ma = true;
	if(result){
		result = _ckMyAreaSelect(r);
		ma = (result?false:true);//
	} 
		
	var vReg = $("[vReg]",r);
	for(var i=0;i<vReg.length;i++){
		var $R = vReg.eq(i);
		var vDom = $R.get(0);
		if(!oneValidate($R,vDom)){
			result = false;
		}
	}
	if(!result){
		if(alt != null && !ma){
			alert(alt);
		}
		if(cDom != null){
			cDom.focus();
		}
		cDom = null;
		alt = null;
//		showErrorInfoDiv();
	}else{
//		clearErrorInfoDiv();
	}
	return result;
}
//不验证或不提示
function _notTipOrCk($R){
	if($R.attr('vReg') == "RADIO" || $R.attr('vReg') == "MYAREA" || $R.attr("vReg").indexOf("CHECKBOX")>=0)
		return true;
}
//不提示
function _notTip($R){
	if($R.attr('vL') != undefined && $R.attr('vL') != null && $R.attr('vL').toString().toUpperCase() == "NO")
		return true;
}
/**
 * 
 * @param {Object} $R  jq对象 要验证的标签对象
 * @param {Object} vDom js对象 要验证的标签对象
 */
function oneValidate($R,vDom){
	//单选按钮、地区下拉列表不验证
	if(_notTipOrCk($R))
		return true;
	
	//获取标签的value值
	var value = $.trim($R.val());
	//获取标签中vReg属性的值
	var vR = $R.attr('vReg');
	//只是提示信息不是要验证
	if((vReg[vR] != undefined ? vReg[vR].toUpperCase() : vReg[vR]) == "TIP")
		return true;
	
//	vR = vR != undefined ? vR.toUpperCase() : vR;
	//截取参数，如果有的话
	var rValue="",eValue ="";
	var rtp = _subParam($R,vR,rValue,eValue,null);
	vR = rtp["vR"];
	//取出对应的正则
	rValue = rtp["rValue"];
	//取出对应的错误提示信息
	eValue = rtp["eValue"];
	
	//定义新的正则规则
	var reg = new RegExp(rValue);
	
	//验证是否存在HTML标签
	if(vR == "NOTHTML"){
		
		if(_ckHTML(value)){			
			return _vRegTestFail($R,vDom,eValue);
		}
	}
	
	if(vR == 'BEFORENOW' || vR == 'AFTERNOW'){
		var InTime = _formatTime(value);//输入时间
		var now = new Date();//当前时间
		if(vR == 'BEFORENOW'?(InTime>now):(InTime<now)){
			//在要小于当前时间时，输入时间大于当前时间，要大于当前时间时，输入时间小于当前时间,验证失败
			return _vRegTestFail($R,vDom,eValue);
		}
	}
		
 
	//验证失败
	if(!reg.test(value)&&vR != "NOTHTML"){
		return _vRegTestFail($R,vDom,eValue);
	}else{//验证成功
		//判断是否是验证时间
		var ck_time = $R.attr("VCK_TIME");
		var _b = true;
		if(ck_time != undefined){
			var InTime = _formatTime(value);//输入时间
			var CkTime = _formatTime(ck_time);//验证时间
			if(vR == 'BEFORETIME'){
				_b = (InTime < CkTime);
			}else if(vR == 'CENTERTIME'){
				_b = (InTime == CkTime);
			}else if(vR == 'AFTERTIME'){
				_b = (InTime > CkTime);
			}
		}
		return _b ? _vRegTestSuccess($R,vDom) : _vRegTestFail($R,vDom,eValue);
	}
}
/**
 * 验证失败
 * @param {Object} $R
 * @param {Object} vDom
 * @param {Object} cDom   验证提示
 * @param {Object} eValue 错误提示信息
 * @return {TypeName} 
 */
function _vRegTestFail($R,vDom,eValue){
	//表现为在后面提示
	if($R.attr("vL") == undefined){
		//第一次出现错误
		if($R.attr("vError") == undefined){
			//添加错误提DIV
			_setVErrorDiv(vDom,eValue);
		}else if($R.attr("vTip") != undefined){
			vDom.removeAttribute("vTip");//用完马上删除
			//添加错误提DIV
			_setVErrorDiv(vDom,eValue);
		}else{
			if($R.attr("vBlur") == undefined){
				//将错误信息添加到数组
				ErrorArray.push(eValue);
			}
		}
	//表现为红线框
	}else{
		//select附加div出现红框
		if(vDom.nodeName == "SELECT"){
			if($R.attr("vError") == undefined){
				var time = new Date().getTime();
				vDom.setAttribute("vError",time);
				//判断是否存在包裹SPAN
				var pSpen = $R.parent();
				if(pSpen.attr("vError") == undefined){
					//生成新的SPAN包裹住SELETE
					$R.wrap('<span class=\"vReg_Error_SelectClass\" vError=\"'+time+'\"></span>');
				}else{
					pSpen.addClass("vReg_Error_SelectClass");
					pSpen.attr("vError",time);
				}
			}
		}else{
			if($R.attr('vReg') != "EMPTY"){
//				var border = getAttrStyle(vDom,"border");
//				var border1 = vDom.style.border;
//				vDom.setAttribute("vBorder",border);//保存原来的border
//				vDom.style.border = 'none'; //再去掉原有border
				$R.addClass("vReg_Error_Line_Class");
			}
		}
		
		var hints = $R.attr("vL");//绑定提示是那个input出现错误
		if(hints != undefined){
			eValue = (hints=="0"?eValue:hints+"："+eValue);
		}
		if(cDom==null){
			alt = eValue;
		}
		
		if($R.attr("vBlur") == undefined){
			//将错误信息添加到数组
			ErrorArray.push(eValue);
		}
		
	}
	
	//存在成功提示div,要删除
	_removeVRightDiv($R,vDom);
		
	if(cDom==null){
		cDom = $R;
	}
		
	return false;
}

/**
 * 验证成功
 * @param {Object} $R
 * @param {Object} vDom
 * @return {TypeName} 
 */
function _vRegTestSuccess($R,vDom){
	//存在错误提示div,要删除
	if($R.attr("vError") != undefined){
		//删除错误提示框
		_removeVErrorDiv($R,vDom);
	}
		
	if($R.hasClass("vReg_Error_Line_Class")){
//		var borber = vDom.getAttribute("vBorder");//获取原来被删除的border
		$R.removeClass("vReg_Error_Line_Class");
//		vDom.style.border = borber; //再附上原有border
	}
		
	//添加正确提示图片
	if($R.attr("vL") == undefined){
		//添加正确提示图片
		_setVRightDiv(vDom);
	}
	return true;
}
/**
 * 添加错误提DIV
 * @param {Object} vDom 标签的DOM对象
 * @param {Object} eValue  对应的错误提示信息
 * @param {Object} _top 标签出现的上边距
 * @param {Object} _left 标签出现的左边距
 * @param {Object} _width 标签的宽度
 */
function _setVErrorDiv(vDom,eValue){
	
//	为了可以自定义显示错误内容，添加vTip属性，vTip属性值则为显示内容
	var vTip = $(vDom).attr("vTip");
	if(vTip != undefined)
		eValue = vTip;
	
	//存在错误提示div,要删除
	if($(vDom).attr("vError") != undefined){
		//删除错误提示框
		_removeVErrorDiv($(vDom),vDom);
	}
		
	//获取验证标签的位置
	var _top = vDom.offsetTop;
	var _left = vDom.offsetLeft;
	var _width = vDom.offsetWidth;
	var _height = vDom.offsetHeight;
	//接收验证标签对象，防止在判断是否有父容器是丢失
	var newVdom = vDom;				
	//判断是否有父容器，如果存在则累加其边距
	while(vDom = vDom.offsetParent) {	//等效 vDom = vDom.offsetParent;while (vDom != undefined)
		_top += vDom.offsetTop; //叠加父容器的上边距
		_left += vDom.offsetLeft; //叠加父容器的左边距
	}
	//还原对象
	vDom = newVdom;
	
	var time = new Date().getTime();
	vDom.setAttribute("vError",time);
	if(self.location != top.location){
		//表示在子窗体
		$("body").append('<div class=\"vReg_Error_Class\" vError=\"'+time+'\"></div>');
	}else{
		//否则在顶层窗体
		$($by()).append('<div class=\"vReg_Error_Class\" vError=\"'+time+'\"></div>');
	}
	//指定错误提示div出现的位置
	var eDiv = $(".vReg_Error_Class[vError="+time+"]").get(0);
	eDiv.style.top = _top+"px";
	eDiv.style.left = _left + _width + 10+"px";
	eDiv.innerHTML = eValue;
						
	//显示错误div
	$(".vReg_Error_Class[vError="+time+"]").show();
	
	if($(vDom).attr("vBlur") == undefined){
		//将错误信息添加到数组
		ErrorArray.push(eValue);
	}
}

/**
 * 删除错误提示框
 * @param {Object} $R
 * @param {Object} vDom
 */
function _removeVErrorDiv($R,vDom){
	var time = $R.attr("vError");
	vDom.removeAttribute("vError");
	if(vDom.nodeName == "SELECT"){
		$(".vReg_Error_SelectClass[vError="+time+"]").removeClass("vReg_Error_SelectClass");
	}else{
		$(".vReg_Error_Class[vError="+time+"]").remove();
	}
}

/**
 * 添加正确提示图片
 * @param {Object} vDom
 * @param {Object} _top 标签出现的上边距
 * @param {Object} _left 标签出现的左边距
 * @param {Object} _width 标签的宽度
 */
function _setVRightDiv(vDom){
	
	//存在成功提示div,要删除
	_removeVRightDiv($(vDom),vDom);
	
	//获取验证标签的位置
	var _top = vDom.offsetTop;
	var _left = vDom.offsetLeft;
	var _width = vDom.offsetWidth;
	var _height = vDom.offsetHeight;
	//接收验证标签对象，防止在判断是否有父容器是丢失
	var newVdom = vDom;				
	//判断是否有父容器，如果存在则累加其边距
	while(vDom = vDom.offsetParent) {	//等效 vDom = vDom.offsetParent;while (vDom != undefined)
		_top += vDom.offsetTop; //叠加父容器的上边距
		_left += vDom.offsetLeft; //叠加父容器的左边距
	}
	//还原对象
	vDom = newVdom;
	
	var time = new Date().getTime();
	vDom.setAttribute("vRight",time);
	if(self.location != top.location){
		//表示在子窗体
		$("body").append('<div class=\"vReg_Right_Class\" vRight=\"'+time+'\"></div>');
	}else{
		//否则在顶层窗体
		$($by()).append('<div class=\"vReg_Right_Class\" vRight=\"'+time+'\"></div>');
	}
	
	//指定错误提示div出现的位置
	var rDiv = $(".vReg_Right_Class[vRight="+time+"]").get(0);
	rDiv.style.top = _top+"px";
	rDiv.style.left = _left + _width + 10+"px";
	$(".vReg_Right_Class[vRight="+time+"]").show();
}
/**
 * 存在成功提示div,要删除
 * @param {Object} $R 标签的JQ对象
 * @param {Object} vDom 标签的DOM对象
 * $R = $(vDom) || $R[0] = vDom
 */
function _removeVRightDiv($R,vDom){
	if($R.attr("vRight") != undefined){
		var time = $R.attr("vRight");
		vDom.removeAttribute("vRight");
		$(".vReg_Right_Class[vRight="+time+"]").remove();
	}
}

/**
 * 验证是否存在HTML标签
 * @param {Object} value
 */
function _ckHTML(value){
	//拦截如：/>，<d>，</ >，< /d>,< d > ,< 'd' > ，< dd=cc> ,<dd="d"> <dd='d'>....
	var reg = /<(\s+)?[a-zA-Z\s]+(\s?)+([a-zA-Z\s]+)?(\s+)?([=]+)?(\s+)?([\\"\\']+)?(\s+)?([a-zA-Z\s]+)?(\s+)?([\\"\\']+)?(\s+)?\/?(\s+)?>|\/(\s+)?>|<(\s+)?\/(\s+)?([a-zA-Z\s]+)?(\s+)?>/g;
//	var reg = /<[a-zA-Z]+\/?(\s?)+>|\/>|<|>/g;
	if(reg.test(value)){
		reg = /<(\s+)?>/g; //去掉这种情况：<  > ,可以验证通过，
		if(reg.test(value))
			return false;
		return true;
	}else
		return false;
}

/**
 * 验证是否存在改变参数
 * @param {Object} vR
 * @param {Object} rValue //取出对应的正则
 * @param {Object} eValue //取出对应的错误提示信息
 * @param {Object} tValue //取出鼠标移上提示信息
 * @return {TypeName} 
 */
function _subParam($R,vR,rValue,eValue,tValue){
	
	vR = new String(vR);
	//判断是否存在多个参数，多个参数以中括号包住，如：[(),()]
	var param = "";
	if(vR.indexOf("(")>0){//存在参数
		var paramList="";
		var paramStr="";
		var pi1 = vR.indexOf("[");
		var pi2 = vR.indexOf("]");
		
		if(pi1>0 && pi2>0 && pi1<pi2){
			//拿出对应的参数集合
			paramStr = vR.substring(pi1+1,pi2);
			paramList = paramStr.toString().split("||");//
//			paramList = eval(paramStr);
			
		}else{
			pi1 = vR.indexOf("(");
			paramList = vR.substring(pi1,vR.length).split("||");;
		}
		
		vR = vR.substr(0,pi1);
		//取出对应的正则
		rValue = vReg[vR];
		//取出对应的错误提示信息
		if(eValue != null)
			eValue = vError[vR];
		//取出鼠标移上提示信息
		if(tValue != null)
			tValue = vTip[vR];
		
		for(var i=0;i<paramList.length;i++){
			param = new String(paramList[i]);	
			param = param.substring((param.indexOf("(")+1),param.indexOf(")"));
			var inStr = "\{\?"+(i+1)+"\}";
			var reg = new RegExp("\\{\\?"+(i+1)+"\\}","g");
			
			rValue = new String(rValue);
			eValue = new String(eValue);
			tValue = new String(tValue);
			
			if(vR == 'BEFORENOW' || vR == 'AFTERNOW' || vR == 'AFTERTIME' || vR == 'CENTERTIME' || vR == 'BEFORETIME'){
				var rtp = _ckDateFormat($R,vR,rValue,eValue,tValue,param);
				vR = rtp["vR"];
				rValue = rtp["rValue"];
				eValue = rtp["eValue"];
				tValue = rtp["tValue"];
				//判断要验证的时间没有规定时间格式
				if(rValue == '' && paramList.length == 1 && (vR == 'AFTERTIME' || vR == 'CENTERTIME' || vR == 'BEFORETIME')){
					var tip ;
					if(vR == 'BEFORETIME'){
						tip = " 且必须小于"+param;
					}else if(vR == 'CENTERTIME'){
						tip = "必须等于"+param;
					}else if(vR == 'AFTERTIME'){
						tip = "必须大于"+param;
					}
					//取出对应的正则
					rValue = vReg["DATE"];
					//取出对应的错误提示信息
					eValue = vError["DATE"]+tip.fontcolor("red");
					//取出鼠标移上提示信息
					tValue = eValue;
				}
			}else if(vR == "NUM"){
				return _ckAndFormatNum($R,vR,rValue,eValue,tValue,param);
			}else{
				rValue = putParamValue(rValue,reg,inStr,param,"{"+param+"}",param);
				eValue = putParamValue(eValue,reg,inStr,param,param!=undefined?param.replace(/\,/g,'-'):'',"可以不填".fontcolor("red"));
				tValue = putParamValue(tValue,reg,inStr,param,param!=undefined?param.replace(/\,/g,'-'):'',"可以不填".fontcolor("red"));
			}
		}
	}else{
		if(vR == 'BEFORENOW' || vR == 'AFTERNOW' || vR == 'AFTERTIME' || vR == 'CENTERTIME' || vR == 'BEFORETIME'){
			//取出对应的正则
			rValue = vReg["DATE"];
			//取出对应的错误提示信息
			eValue = vError["DATE"];
			//取出鼠标移上提示信息
			tValue = vTip["DATE"];
		}else{
			//取出对应的正则
			rValue = vReg[vR];
			//取出对应的错误提示信息
			eValue = vError[vR];
			//取出鼠标移上提示信息
			tValue = vTip[vR];
		}
	}
	
	//判断正则中是否存在{?}或{?..},而vReg中又没有给参数 ，主要是在判断是否可以为空是出现
	rValue = rValue!=undefined?rValue.replace(/\{\?\}|\{\?\d\}/g,''):'';
	eValue = eValue!=undefined?eValue.replace(/\{\?\}|\{\?\d\}/g,''):'';
	tValue = tValue!=undefined?tValue.replace(/\{\?\}|\{\?\d\}/g,''):'';
	timeTip = null;	
	return {"vR":vR,"rValue":rValue,"eValue":eValue,"tValue":tValue,"param":param};
}
/**
 * @param {Object} value	要改变的字符串
 * @param {Object} reg		正则	
 * @param {Object} param	替换参数
 * @param {Object} inStr	
 * @param {Object} reparam	拿来替换的字符串  不为空
 * @param {Object} emParam	拿来替换的字符串	 为空
 * @return {TypeName} 
 */
function putParamValue(value,reg,inStr,param,reparam,emParam){
	if(value != null && value != "null"){
		if(value.indexOf(inStr)>=0){
			if(param == '|^$')//该参数表示加上可以为空
				value = value!=undefined?value.replace(reg,emParam):'';
			else
				value = value!=undefined?value.replace(reg,reparam):'';
		}else if(value.indexOf("{?}")>=0){//为了兼容之前的
			if(param == '|^$')//该参数表示加上可以为空
				value = value!=undefined?value.replace(/\{\?\}/g,emParam):'';
			else
				value = value!=undefined?value.replace(/\{\?\}/g,reparam):'';
		}
	}
	return value;
}
function _ckAndFormatNum($R,vR,rValue,eValue,tValue,param){
	if(!_chIsEmptyOrNull(param)){
		paramList = param.toString().split(",");
		//NUM的参数优先级别：小数点左边最多位数(+:表示固定位数) ——> 小数点右边最多位数(+:表示固定位数) ——> 是否正数(0/1/2) ——> 是否可为空(0/1)
		//判断参数的优先级
		var index = paramList.length;
		if(index == 0){
			rValue = "^([-][1-9])?(\\d+)?(\\.)?(\\d+)?$";
			eValue = "只能输入正数或负数，可以带有小数，或不填!";
		}else if(index == 1){// 只有一个参数
			return  numParam_1(paramList,vR,rValue,eValue,tValue);
		}else if(index == 2){// 只有两个参数
			return  numParam_2(paramList,vR,rValue,eValue,tValue);
		}else if(index == 3 ||　index == 4){// 只有三个参数　或　 只有四个参数
			return  numParam_3(paramList,vR,rValue,eValue,tValue);
		}
	}else{
		rValue = "^([-][1-9])?(\\d+)?(\\.)?(\\d+)?$";
		eValue = "只能输入正数或负数，可以带有小数，或不填!";
	}
	return {"vR":vR,"rValue":rValue,"eValue":eValue,"tValue":tValue};
}
function numParam_1(paramList,vR,rValue,eValue,tValue){
	var p_1 = paramList[0];
	if(p_1.indexOf("+")==0){
		var p_1 = p_1.toString().substring(0);
		p_1 = new Number(p_1);
		rValue = "^"+(p_1<=0?"":"[1-9]\\d{"+(p_1-1)+"}")+"$";
		eValue = "只能输入"+p_1.toString().fontcolor('red')+"位正整数!";
	}else{
		p_1 = new Number(p_1);
		p_1 = p_1 <= 0 ? 1 : p_1;
		rValue = "^[1-9]\\d{0,"+(p_1-1)+"}$";
		eValue = "最多只能输入"+p_1.toString().fontcolor('red')+"位正整数!";
	}
	tValue = eValue;
	return {"vR":vR,"rValue":rValue,"eValue":"输入格式错误："+eValue,"tValue":tValue};
}
function numParam_2(paramList,vR,rValue,eValue,tValue){
	var p_1 = paramList[0];
	var p_2 = paramList[1];
	if(p_1.indexOf("+")==0 && p_2.indexOf("+")==0){
		p_1 = p_1.toString().substring(0);
		p_1 = new Number(p_1);
		
		p_2 = p_2.toString().substring(0);
		p_2 = new Number(p_2);
		
		rValue = "^[1-9]\\d{"+(p_1-1)+"}"+(p_2>0 ? "\\.\\d{"+(p_2)+"}" : "")+"$";
		eValue = "只能输入"+p_1.toString().fontcolor('red')+"位数!且保留"+p_2.toString().fontcolor('red')+"位小数!";
	}else if(p_1.indexOf("+")==0 && p_2.indexOf("+")!=0){
		p_1 = p_1.toString().substring(0);
		p_1 = new Number(p_1);

		p_2 = new Number(p_2);
		
		rValue = "^[1-9]\\d{"+(p_1-1)+"}"+(p_2>0 ? "(\\.\\d{1,"+(p_2)+"})?" : "")+"$";
		eValue = "只能输入"+p_1.toString().fontcolor('red')+"位数!且最多保留"+p_2.toString().fontcolor('red')+"位小数!";
	}else if(p_1.indexOf("+")!=0 && p_2.indexOf("+")==0){
		p_1 = new Number(p_1);

		p_2 = p_2.toString().substring(0);
		p_2 = new Number(p_2);
		rValue = "^[1-9]\\d{0,"+(p_1-1)+"}"+(p_2>0 ? "\\.\\d{"+(p_2)+"}" : "")+"$";
		eValue = "最多只能输入"+p_1.toString().fontcolor('red')+"位数!且保留"+p_2.toString().fontcolor('red')+"位小数!";
	}else if(p_1.indexOf("+")!=0 && p_2.indexOf("+")!=0){
		p_1 = new Number(p_1);

		p_2 = p_2.toString().substring(0);
		p_2 = new Number(p_2);
		
		rValue = "^[1-9]\\d{0,"+(p_1-1)+"}"+(p_2>0 ? "(\\.\\d{1,"+(p_2)+"})?" : "")+"$";
		eValue = "最多只能输入"+p_1.toString().fontcolor('red')+"位数!且最多保留"+p_2.toString().fontcolor('red')+"位小数!";
	}
	tValue = eValue;
	return {"vR":vR,"rValue":rValue,"eValue":"输入格式错误："+eValue,"tValue":tValue};
}
function numParam_3(paramList,vR,rValue,eValue,tValue){
	var p_1 = paramList[1];
	var p_2 = paramList[2];
	var p_3 = paramList[0];
	var p_4 = "";
	var p_3_t = "";
	var p_4_t = "";
	if(paramList.length == 4){
		p_4 = paramList[3];
		p_4_t = p_4 == '1' ? '或可不填!' : '';
		p_4 = p_4 == '1' ? '|^$' : '';
	}
	p_3_t = p_3 == '0' ? '负数' : '数';
	p_3 = p_3 == '0' ? '[-]' : (p_3 == '1' ? '' : '([-])?');
	
	if(p_1.indexOf("+")==0 && p_2.indexOf("+")==0){
		
		p_1 = p_1.toString().substring(0);
		p_1 = new Number(p_1);
		
		p_2 = p_2.toString().substring(0);
		p_2 = new Number(p_2);
		rValue = "^"+p_3+"[1-9]\\d{"+(p_1-1)+"}"+(p_2>0 ? "\\.\\d{"+(p_2)+"}" : "")+"$";
		eValue = "只能输入"+p_1.toString().fontcolor('red')+"位"+p_3_t+"!且保留"+p_2.toString().fontcolor('red')+"位小数!";
	}else if(p_1.indexOf("+")==0 && p_2.indexOf("+")!=0){
		p_1 = p_1.toString().substring(0);
		p_1 = new Number(p_1);

		p_2 = new Number(p_2);
		rValue = "^"+p_3+"[1-9]\\d{"+(p_1-1)+"}"+(p_2>0 ? "(\\.\\d{1,"+(p_2)+"})?" : "")+"$";
		eValue = "只能输入"+p_1.toString().fontcolor('red')+"位"+p_3_t+"!且最多保留"+p_2.toString().fontcolor('red')+"位小数!";
	}else if(p_1.indexOf("+")!=0 && p_2.indexOf("+")==0){
		p_1 = new Number(p_1);

		p_2 = p_2.toString().substring(0);
		p_2 = new Number(p_2);
		rValue = "^"+p_3+"[1-9]\\d{0,"+(p_1-1)+"}"+(p_2>0 ? "\\.\\d{"+(p_2)+"}" : "")+"$";
		eValue = "最多只能输入"+p_1.toString().fontcolor('red')+"位"+p_3_t+"!且保留"+p_2.toString().fontcolor('red')+"位小数!";
	}else if(p_1.indexOf("+")!=0 && p_2.indexOf("+")!=0){
		p_1 = new Number(p_1);

		p_2 = p_2.toString().substring(0);
		p_2 = new Number(p_2);
		rValue = "^"+p_3+"[1-9]\\d{0,"+(p_1-1)+"}"+(p_2>0 ? "(\\.\\d{1,"+(p_2)+"})?" : "" )+"$";
		eValue = "最多只能输入"+p_1.toString().fontcolor('red')+"位"+p_3_t+"!且最多保留"+p_2.toString().fontcolor('red')+"位小数!";
	}
	rValue = rValue + p_4;
	eValue = eValue + p_4_t.toString().fontcolor('red');
	tValue = eValue;
	return {"vR":vR,"rValue":rValue,"eValue":"输入格式错误："+eValue,"tValue":tValue};
}
/**
 * @param {Object} time 时间字符串 格式：yyyy-MM-dd HH:mm:ss 或 yyyy/MM/dd HH:mm:ss 或 yyyy-MM-dd 或 yyyy/MM/dd
 * @return {TypeName} 时间类型
 */
function _formatTime(time){
	var rB = null;
	if(time != undefined && time != null && time != ""){
		try{
			var vB = time;
			var a = vB.toString().split(" ");
			var b = a[0].split(/-|\//g);
			var c = null;
			if(a.length>1)
				c = a[1].split(/\:/g);
			if(b == null){
				b = new Array(3);	
			}
			if(c == null){
				c = new Array(3);
			}
			for(var i=0;i<3;i++){
				if(b[i]==undefined)
					b[i] = "00";
				if(c[i]==undefined)
					c[i] = "00";
			}	
			
			rB = new Date(b[0],b[1]=="00"?b[1]:b[1]*1-1,b[2],c[0],c[1],c[2]);
		}catch(e){
			return rB;
		}
	}
	
	return rB;
}
var timeTip;
function _ckDateFormat($R,vR,rValue,eValue,tValue,param){
	var reg = /^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(-|\/)(((0[13578]|1[02])(-|\/)(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(-|\/)(0[1-9]|[12][0-9]|30))|(02(-|\/)(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))(-|\/)02(-|\/)29))(\\s{1,4})?((([01]?[0-9])|([2][0123])):([0-5]?[0-9]):([0-5]?[0-9]))?$/;
	var empty = "";
	var empT = "";
	var format = "";
	if(param == '|^$'){//该参数表示加上可以为空
		empty = "|^$";
		empT = " 或 " + "不填!".fontcolor("red");
	}else if(rValue != "" && !reg.test(param)){
		rValue += "|";
		eValue += " 或 " + "</br>";
	}
	if(eValue == "undefined" || eValue == "null"){
		eValue = "";
	}
	var tip = (vR=='BEFORENOW'?"小于当前时间".fontcolor("red"):"大于当前时间".fontcolor("red"));
	if(reg.test(param)){
		if(vR == 'BEFORETIME'){
			tip = "必须小于";
		}else if(vR == 'CENTERTIME'){
			tip = "必须等于";
		}else if(vR == 'AFTERTIME'){
			tip = "必须大于";
		}
		tip = (tip + param).fontcolor("red");
		timeTip = tip.fontcolor("red");
		$R.attr("VCK_TIME",param);
	}else if(timeTip != undefined && timeTip != null){
		tip = timeTip;
	}
	var yy = /^([a-zA-Z]{1,4})$/;
	var m1 = /^([a-zA-Z]{1,4})(-|)([a-zA-Z]{1,2})$/;
	var m2 = /^([a-zA-Z]{1,4})(\/)([a-zA-Z]{1,2})$/;
	var d1 = /^([a-zA-Z]{1,4})(-|)([a-zA-Z]{1,2})(-|)([a-zA-Z]{1,2})$/;
	var d2 = /^([a-zA-Z]{1,4})(\/)([a-zA-Z]{1,2})(\/)([a-zA-Z]{1,2})$/;
	var sH = /^([a-zA-Z]{1,4})(-)([a-zA-Z]{1,2})(-)([a-zA-Z]{1,2})\s{1,4}([H]{2}):([m]{2}):([s]{2})$/;
	var sH1 = /^([a-zA-Z]{1,4})(\/)([a-zA-Z]{1,2})(\/)([a-zA-Z]{1,2})\s{1,4}([H]{2}):([m]{2}):([s]{2})$/;
	var sh = /^([a-zA-Z]{1,4})(-)([a-zA-Z]{1,2})(-)([a-zA-Z]{1,2})\s{1,4}([h]{2}):([m]{2}):([s]{2})$/;
	var sh1 = /^([a-zA-Z]{1,4})(\/)([a-zA-Z]{1,2})(\/)([a-zA-Z]{1,2})\s{1,4}([h]{2}):([m]{2}):([s]{2})$/;
	if(yy.test(param)){//时间格式：yyyy-MM-dd 或 yyyy/MM/dd
		format += "YYYY";
		rValue += "^([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})$";
		eValue += "只能输入年份且"+tip+",格式如：";
	}else if(m1.test(param)){
		format += "YYYY-MM !";
		rValue += "^([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(0[13456789]|1[012])$";
		eValue += "只能输入年份和月份且"+tip+",格式如：";
	}else if(m2.test(param)){
		format += "YYYY";
		rValue += "^([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})\/(0[13456789]|1[012])$";
		eValue += "只能输入年份和月份且"+tip+",格式如：";
	}else if(d1.test(param)){
		format += "YYYY-MM-DD !";
		rValue += "^(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))$|^((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)$";
		eValue += "只能输入年月日且"+tip+",格式如：";
	}else if(d2.test(param)){
		format += "YYYY/MM/DD !";
		rValue += "^(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})\/(((0[13578]|1[02])\/(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)\/(0[1-9]|[12][0-9]|30))|(02(\/)(0[1-9]|[1][0-9]|2[0-8]))))$|^((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))\/02\/29)$";
		eValue += "只能输入年月日且"+tip+",格式如：";
	}else if(sH.test(param)){
		format += "YYYY-MM-DD HH:mm:ss !";
		rValue += "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(-)(((0[13578]|1[02])(-)(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(-)(0[1-9]|[12][0-9]|30))|(02(-)(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))(-)02(-)29))\\s{1,4}((([01]?[0-9])|([2][0123])):([0-5]?[0-9]):([0-5]?[0-9]))$";
		eValue += "只能输入年月日时(24小时制)分秒且"+tip+"! 格式如：";
	}else if(sh.test(param)){
		format += "YYYY-MM-DD hh:mm:ss !";
		rValue += "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(-)(((0[13578]|1[02])(-)(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(-)(0[1-9]|[12][0-9]|30))|(02(-)(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))(-)02(-)29))\\s{1,4}((([0]?[0-9])|([01][012])):([0-5]?[0-9]):([0-5]?[0-9]))$";
		eValue += "只能输入年月日时(12小时制)分秒且"+tip+"! 格式如：";
	}else if(sH1.test(param)){
		format += "YYYY/MM/DD HH:mm:ss !";
		rValue += "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(\/)(((0[13578]|1[02])(\/)(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(\/)(0[1-9]|[12][0-9]|30))|(02(\/)(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))(\/)02(\/)29))\\s{1,4}((([01]?[0-9])|([2][0123])):([0-5]?[0-9]):([0-5]?[0-9]))$";
		eValue += "只能输入年月日时(24小时制)分秒且"+tip+"! 格式如：";
	}else if(sh1.test(param)){
		format += "YYYY/MM/DD hh:mm:ss !";
		rValue += "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(\/)(((0[13578]|1[02])(\/)(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(\/)(0[1-9]|[12][0-9]|30))|(02(\/)(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))(\/)02(\/)29))\\s{1,4}((([0]?[0-9])|([01][012])):([0-5]?[0-9]):([0-5]?[0-9]))$";
		eValue += "只能输入年月日时(12小时制)分秒且"+tip+"! 格式如：";
	}
	rValue += empty;
	eValue += format.fontcolor("red") + empT;
	tValue = eValue;
	return {"vR":vR,"rValue":rValue,"eValue":eValue,"tValue":tValue};
}

/**
 * 判断是否选择了单选按钮
 * @param {Object} r 表单form对象
 * @return {TypeName} 
 */
function _ckRadio(r){
	var result = true;
	var eValue = "";
	var name = "";
	var vReg = $("[vReg=RADIO][type=radio]",r);
	for(var i=0;i<vReg.length;i++){
		var rD = vReg.eq(i)[0];
		if(rD.name != name){
			name = rD.name;
			var vName = $("[name='"+name+"']",r);
			//避免有多组radio
			for(var j=0;j<vName.length;j++){
				var rN = vName.eq(j);
				if(rN.attr("vReg")=="RADIO"){//避免不是radio的标签有相同的name值，
					if(rN[0].checked){
						break;
					}else if(j==vName.length -1){
						eValue = vError["RADIO"];
						var hints =rN.attr("vL");//绑定提示是那个input出现错误
						if(hints != undefined)
							eValue = (hints=="0"?eValue:hints+"："+eValue);
						alert(eValue);
						
						/*if(rN.attr("vBlur") == undefined){
							//TODO将错误信息添加到数							
							ErrorArray.push(eValue);
							showErrorInfoDiv();
						}else{
							alert(eValue);
						}*/
						result = false;
						break;
					}
				}
			}
		}
	}
	if(!result){
		
	}
	return result;
}
/**
 * 检查checkbox
 * @param {Object} r
 * @return {TypeName} 
 */
function _ckCheckBox(r){
	var result = true;
	//截取参数，如果有的话
	var rValue="",eValue ="",param="";
	var name = "";
	var vReg = $("input[type='checkbox'][vReg]",r);
	for(var i=0;i<vReg.length;i++){
		var rD = vReg.eq(i)[0];
		if(rD.name != name){
			var vR = vReg.eq(i).attr('vReg');
			var rtp = _subParam(vReg.eq(i),vR,rValue,eValue,null);
			vR = rtp["vR"];
			rValue = rtp["rValue"];
			eValue = rtp["eValue"];
			param = rtp["param"];
			var ps = param.split(",")[0]; 
			ps = (ps==""?0:ps);
			if(ps == 0 || ps == "0"){
				continue;
			}			
			name = rD.name;
			var vName = $("[name="+name+"]",r);
			//避免有多组checkbox
			var c = (ps==0?0:1);
			for(var j=0;j<vName.length;j++){
				var rN = vName.eq(j);
				if(rN.attr("vReg")!=undefined && rN.attr("vReg")!=null && rN.attr("vReg").indexOf("CHECKBOX")>=0){//避免不是checkbox的标签有相同的name值，
					if(rN[0].checked){
						if(c==parseInt(ps)){
							break;
						}
						c++;
					}
					if(j==vName.length -1){
						var hints =rN.attr("vL");//绑定提示是那个input出现错误
						if(hints != undefined)
							eValue = (hints=="0"?eValue:hints+"："+eValue);
						alert(eValue);
						
						/*if(rN.attr("vBlur") == undefined){
							//TODO将错误信息添加到数							
							ErrorArray.push(eValue);
							showErrorInfoDiv();
						}else{
							alert(eValue);
						}*/
						result = false;
						break;
					}
				}
			}
		}
	}
	return result;
}
/**
 * 判断是否选择了地区下拉列表
 * @param {Object} r 表单form对象
 * @return {TypeName} 
 */
function _ckMyAreaSelect(r){
	var result = true;
	var vReg = $("[vReg='MYAREA']",r);
	for(var i=0;i<vReg.length;i++){
		var $R = vReg.eq(i);
		result = _ckMyAreaValue($R);
		if(!result)break;
	}
	return result;
}

function _ckMyAreaValue(r){
	var checknum = r.attr("vCkNum");//判断下拉列表至少要选择几项
	var f = $("select[id^=_myFirstArea_]",r)[0]!=undefined?$("select[id^=_myFirstArea_]",r)[0].value:null;
	var s = $("select[id^=_mySecondArea_]",r)[0]!=undefined?$("select[id^=_mySecondArea_]",r)[0].value:null;
	var t = $("select[id^=_myThirdArea_]",r)[0]!=undefined?$("select[id^=_myThirdArea_]",r)[0].value:null;
	if(f == '00' || f == '请选择'){
		alert("请选择所在的省!");
//		if(r.attr("vBlur") == undefined){
//			//将错误信息添加到数组
//			ErrorArray.push("请选择所在的省!");
//			showErrorInfoDiv();
//		}else{
//			alert(eValue);
//		}
		return false;
	}
	if((s == '00' || s == '请选择') && (checknum == undefined || checknum == 2 || checknum == 3)){
		alert("请选择所在的市!");
//		if(r.attr("vBlur") == undefined){
//			//将错误信息添加到数组
//			ErrorArray.push("请选择所在的市!");
//			showErrorInfoDiv();
//		}else{
//			alert(eValue);
//		}
		return false;
	}
	if((t == '00' || t == '请选择') && (checknum == undefined || checknum == 3)){
		alert("请选择所在的区/县!");
		
//		if(r.attr("vBlur") == undefined){
//			//将错误信息添加到数组
//			ErrorArray.push("请选择所在的区/县!");
//			showErrorInfoDiv();
//		}else{
//			alert(eValue);
//		}
		return false;
	}
	var fp = $("#_myFirstProduct",r)[0]!=undefined?$("#_myFirstProduct",r)[0].value:null;
	var sp = $("#_mySecondProduct",r)[0]!=undefined?$("#_mySecondProduct",r)[0].value:null;
	var tp = $("#_myThirdProduct",r)[0]!=undefined?$("#_myThirdProduct",r)[0].value:null;
	if(fp == '00' || fp == '请选择'){
		alert("请选择第一级分类!");
		
//		if(r.attr("vBlur") == undefined){
//			//将错误信息添加到数组
//			ErrorArray.push("请选择第一级分类!");
//			showErrorInfoDiv();
//		}else{
//			alert(eValue);
//		}
		return false;
	}
	if((sp == '00' || sp == '请选择') && (checknum == undefined || checknum == 2 || checknum == 3)){
		alert("请选择第二级分类!");
		
//		if(r.attr("vBlur") == undefined){
//			//将错误信息添加到数组
//			ErrorArray.push("请选择第二级分类!");
//			showErrorInfoDiv();
//		}else{
//			alert(eValue);
//		}
		return false;
	}
	if((tp == '00' || tp == '请选择') && (checknum == undefined || checknum == 3)){
		alert("请选择第三级分类!");
		
//		if(r.attr("vBlur") == undefined){
//			//将错误信息添加到数组
//			ErrorArray.push("请选择第三级分类!");
//			showErrorInfoDiv();
//		}else{
//			alert(eValue);
//		}
		return false;
	}
	return true;
}

/**
 * 判断密码是否一致
 * @param {Object} r 表单form对象
 * @return {TypeName} 
 */
function samePassWord(r){
	var pwd1 = "";
	var pwd2 = "";
	var vReg = $("[vReg^=PASSWORD]",r);
	if(vReg.length == 2){
		//获取标签的value值
		pwd1 = $.trim(vReg.eq(0).val());
		pwd2 = $.trim(vReg.eq(1).val());
		if($.trim(pwd1) != $.trim(pwd2)){
			if(vReg.eq(0).attr("vL") == undefined){
				_setVErrorDiv(vReg.eq(0)[0],"你输入的密码不一致!请重新输入!");
				_setVErrorDiv(vReg.eq(1)[0],"你输入的密码不一致!请重新输入!");
			}else{
				alert("你输入的密码不一致!请重新输入!");
			}
			
			//存在成功提示div,要删除
			_removeVRightDiv(vReg.eq(0),vReg.eq(0)[0]);
			_removeVRightDiv(vReg.eq(1),vReg.eq(1)[0]);
			
			vReg.eq(1).val("");
			vReg.eq(0).val("").focus();
			
			return false;
		}
		return true;
	}
	return true;
}

/**
 * 检查用户名是否存在
 * 
 * 异步请求Action，必须要有key值为b的boolean值，要来判断是否存在，b = true存在，b = false不存在
 * key值为result的返回提示结果信息，
 * @param {Object} r 要验证的input对象
 */
function isHasThisValue(r,url){
	//判断是修改还是新增，修改操作不用检测自己的值
	var hr = $("input[type=hidden][name=hide_"+r.name+"]",$(r).parents('body'));
	if(!_chIsEmptyOrNull(hr[0].value) && !_chIsEmptyOrNull(r.value) && r.value == hr[0].value){
		//修改时，没有改变原来的值..不检测
		return ;
	}
	
	if(url == null || url == undefined)
		url = $(r).attr("vPath");
	var param = r.name + "=" + r.value;
	var rFun = function(ex){
		if(ex.b){
			if($(r).attr("vL") == undefined){
				_setVErrorDiv(r,ex.result);
			}else{
				alert(ex.result);
//				_defaul_show(3,ex.result+"</br>");
				//将错误信息添加到数组
//				if($(r).attr("vBlur") == undefined){
//					//将错误信息添加到数组
//					ErrorArray.push(ex.result);
//					showErrorInfoDiv();
//				}else{
//					alert(eValue);
//				}
			}
			$(r).focus().val(hr.val());
		}
	}
	if($.trim(r.value)!="")
		_myAjax(url,param,rFun);
}

/**
 * 判断登录是否成功
 * @param {Object} 'flag' the type is boolean ,if true ,the result is fail.
 */
function _myInitLogin(flag,result){
	if(flag){
		if($("[vReg='UNAME']").attr("vL") != undefined){
			alert(result);
			//将错误信息添加到数组
//			ErrorArray.push(result);
//			showErrorInfoDiv();
		}else{
			$("[vReg='UNAME'],[vReg='PASSWORD']").attr("vTip",result).focus().blur();
		}
		$("[vReg='PASSWORD']").val("");
	}
}

/**
 * 异步请求
 * @param {Object} url 请求地址
 * @param {Object} param 请求参数
 * @param {Object} returnFunction 回调函数
 */
function _myAjax(url,param,returnFunction){
	$.ajax({
		type: "POST",
		url: encodeURI(url),
		data: param,
		dataType :"json",
		success: returnFunction						
	});
}

//当页面加载状态改变的时候执行这个方法. 
//document.onreadystatechange = function(){ 
//	//当页面加载状态为完全结束时进入
//	if(document.readyState == "complete"){
//		//检查是否存在要检测某个值的唯一性，既存在 vPath
//		appenHideInput();
//	}
//}

$(function(){
	appenHideInput();
})

/**
 * //检查是否存在要检测某个值的唯一性，既存在 vPath
 */
function appenHideInput(){
	var vpath = $("[vPath]");
	for(var i = 0;i<vpath.length;i++){
		var name = vpath.eq(i).attr("name");
		var value = vpath.eq(i).val();
		if(self.location != top.location){
			//表示在子窗体
			$("body").append("<input name=\"hide_"+name+"\" value=\""+value+"\" type=\"hidden\" />");
		}else{
			//否则在顶层窗体
			$($by()).append("<input name=\"hide_"+name+"\" value=\""+value+"\" type=\"hidden\" />");
		}
	}
}

/**
 * 判断某值val是否存在或者为空字符串
 * @param {Object} val
 * @return {TypeName} 
 */
function _chIsEmptyOrNull(val){
	if(val != undefined && val != null && val != ""){
		return false;
	}else{
		return true;
	}
}

/**
 * 获取滚动条的高度
 * @return {TypeName} 
 */
function _getPageScroll(){ 
	var yScroll; 
	if (self.pageYOffset) { 
		yScroll = self.pageYOffset; 
	    //xScroll = self.pageXOffset; 
	} else if (document.documentElement && document.documentElement.scrollTop){ 
		yScroll = document.documentElement.scrollTop; 
	} else if (document.body) { 
		yScroll = document.body.scrollTop; 
	} 
	return yScroll; 
}

/**
 * 显示错误信息集合
 * @return {TypeName} 
 */
var ErrorArray = (ErrorArray == undefined || ErrorArray == null) ? new Array() : ErrorArray;
function showErrorInfoDiv(info){
	var sum = ErrorArray.length;
	if(sum <= 0){
		return;
	}
	clearErrorInfoDiv();
	var html = "";
	html += '<div class="vReg_Error_Class_Top" style="top:'+(window.top != window.self ? $(window.top).scrollTop() : $(window).scrollTop())+'px;">';
  	html += ErrorArray.shift();//删除并返回第一个数组值
  	if(info == undefined){
	  	html += '<label style="margin-left: 10px;font-size: 11px;color: blue;cursor: pointer;" title="点击查看下一条" onclick="nextErrorInfoDiv(this);">失败('+sum+')</label>';
	  	html += '<label style="margin-left: 10px;font-size: 11px;color: blue;cursor: pointer;" title="我知道了（不提示下一条）..." onclick="javascript:$(this).parent(\'.vReg_Error_Class_Top\').remove();ErrorArray = new Array();showErrorInfoDiv();">x</label>';
  	}
  	html += '</div>';
  	$lbtBody = window.top.document != undefined ? (window.top.document.body != undefined ? window.top.document.body  : document.body) : document.body;
  	$($lbtBody).append(html);
}
function clearErrorInfoDiv(){
	if($('.vReg_Error_Class_Top')[0] != undefined && $('.vReg_Error_Class_Top').is(":visible")){
		$('.vReg_Error_Class_Top').remove();
	}else if(parent.$('.vReg_Error_Class_Top')[0] != undefined && parent.$('.vReg_Error_Class_Top').is(":visible")){
		parent.$('.vReg_Error_Class_Top').remove();
	}
}
function nextErrorInfoDiv(r){
	$(r).parent('.vReg_Error_Class_Top').remove();
	showErrorInfoDiv();
}
/**
 * 扩充正则方法
 * @param {Object} key 		正则键
 * @param {Object} reg		正则
 * @param {Object} tip 		错误鼠标提示信息
 * @param {Object} error	错误提示信息
 * 
 * E.FLY 2012.06.14
 * 初始化正则所有参数
 * //vReg表示对应的正则，可以到myValidationReg.js查看
 * //vL表示是否出现输入错误或者正确提示，!= undefined 或者有该属性表示不提示，否则提示
 * //提示效果是：出现在input标签后面
 * //vL != undefined 或者有该属性时,如果验证失败，会为input标签加上红框
 * 如果输入的字符长度需要改变，可以在vReg值后面加上取值范围格式为:(x,xx)，如vReg="NOTHTML(1,20)"
 * 对应的正则和提示信息则用{?}替代，如:"NOTHTML":"^.{?}$"和提示信息如:"NOTHTML":"不能输入HTML标签!且在{?}之间!"
 * //为了可以自定义显示错误内容，添加vTip属性，vTip属性值则为显示内容
 * //为了判断地区是否需要选择加上 MYAREA key值，使用时用一个容器包住includ进来的地区联动jsp,并为此容器加上属性vReg="MYAREA" vL="0" 记得判断是否选择地区
 * //为了满足有些input在某个地方必填，在某个地方可不填，如电话vReg="PHONE"：为它加上参数后：vReg="PHONE(|^$)"可不填，注意此参数是固定的。否则是必填的。
 * //可以有多个参数，如：vReg="TEST[(1,2)||(3,4)||(4)]"，多个参数是，参数必须放到中括号[]里面，以两竖线(||)分隔
 * 正则写法和提示信息写法请看 TEST 如："TEST":"^[0-9]{?1}$|^[a-z]{?2}$|^A{?3}$",第一个参数标识 ?1,第二个 ?2,以此类推....
 * 添加属性：vCkNum(2)//判断下拉列表至少要选择几项
 * 复选框：CHECKBOX(2)参数表示至少必选多少个，没有参数时表示可以不选
 */ 
function _put_vReg(key,reg,tip,error){
	try{
		if(key == undefined || key == null || key == ""){
			throw "the Key is not null or undefined in function _put_vReg(key,reg,tip,error) ... ";
		}
		vReg[key] = reg;
		vTip[key] = tip == undefined ? error : tip;
		vError[key] = error == undefined ? tip : error;
	}catch(e){
		e;
	}
}
$(document).ready(function(){  
   (function() {  
        $(window.top != undefined ? window.top : window).scroll(function(){  
            var position = $(window).scrollTop();  
            $('.vReg_Error_Class_Top').css("top",position);
        });
    })();  
}); 



